import os
from typing import List
from audio_pkg.models.taskdata import TaskSuccessDate
class AudioSaver:
    def __init__(self, logger,output_dir: str = "audio_output"):
        """
        初始化 AudioSaver。

        :param output_dir: 保存音频文件的目录，默认为 "audio_output"
        """
        self.output_dir = output_dir
        self.logger = logger
        # 确保输出目录存在
        os.makedirs(self.output_dir, exist_ok=True)

    def save_audio(self, task: TaskSuccessDate) -> str:
        """
        保存单个任务的音频数据到文件。

        :param task: TaskSuccessDate 对象，包含音频数据和类型
        :return: 保存的文件路径
        """
        if isinstance(task,TaskSuccessDate):

            if not task.audio_data or not task.audio_type:
                raise ValueError("音频数据或音频类型为空")

            # 生成文件名：任务ID + 音频类型后缀
            filename = f"{task.task_id}.{task.audio_type}"
            file_path = os.path.join(self.output_dir, filename)

            # 将二进制数据写入文件
            with open(file_path, "wb") as f:
                f.write(task.audio_data)

            return file_path
        else:
            self.logger.error("数据类型错误")

    def save_all_audios(self, tasks: List[TaskSuccessDate]) -> List[str]:
        """
        保存多个任务的音频数据到文件。

        :param tasks: 只允许TaskSuccessDate对象
        :return: 保存的文件路径列表
        """
        saved_files = []
        for task in tasks:
            try:
                file_path = self.save_audio(task)
                saved_files.append(file_path)
                self.logger.info(f"任务 {task.task_id} 的音频已保存到 {file_path}")
            except Exception as e:
                self.logger.error(f"保存任务 {task.task_id} 的音频失败：{e}")
        return saved_files
    